package cn.fansunion.leecode.array.max;

/**
 * 485. 最大连续 1 的个数
 * 给定一个二进制数组 nums ， 计算其中最大连续 1 的个数。
 * https://leetcode-cn.com/problems/max-consecutive-ones/
 * @author wen.lei@brgroup.com
 *
 * 2022-2-26
 */
public class MaxConsecutiveOnes {
    /*  示例 1：
    
    输入：nums = [1,1,0,1,1,1]
    输出：3
    解释：开头的两位和最后的三位都是连续 1 ，所以最大连续 1 的个数是 3.
    示例 2:
    
    输入：nums = [1,0,1,1,0,1]
    输出：2
     
    
    提示：
    
    1 <= nums.length <= 105
    nums[i] 不是 0 就是 1.*/
    /**
     * 遍历数组，维护当前最大1的个数和最大连续1的个数，返回max
     * @param nums
     * @return
     */
    public int findMaxConsecutiveOnes(int[] nums) {
        int currentConsecutiveOneSize=0;
        int maxConsecutiveOneSize=0;
        for(int num:nums) {
            if(num==1) {
                currentConsecutiveOneSize++;
                //性能考虑，1连续时没更新最大值，连续中断更新或最后更新1次即可
            }else {
                //遇到0，连续中断，更新最大值
                maxConsecutiveOneSize=Math.max(maxConsecutiveOneSize, currentConsecutiveOneSize);
                currentConsecutiveOneSize=0;
            }
        }
        //可能全都是1或最后一段全是1
        maxConsecutiveOneSize=Math.max(maxConsecutiveOneSize, currentConsecutiveOneSize);
        return maxConsecutiveOneSize;
    }
}
